from PIL import Image

# 引入必要的库
import yaml
import cv2
import numpy as np
import joblib
import os
import time
from skimage.feature import hog
from skimage.io import imread
from skimage.transform import resize
from skimage.color import rgb2gray
# 获取 0_setting.yaml 中的键 key 对应的值 value
def get(key):
    with open('E:/computer_vision/shufa_app/0_setting.yaml', 'r', encoding='utf-8') as file:
        config = yaml.safe_load(file)
    return config.get(key)

    if value is None:
        raise ValueError(f"在配置文件中未找到键 '{key}' 对应的值")
    return value
# 预处理图像, 把图像设置为指定大小之后，使用HOG特征提取
def preprocess_image(file_path, new_size):
    # 读取图像
    image = imread(file_path)
    # 将图像转换为灰度图像
    if image.ndim == 3:  # 如果是彩色图像
        image = rgb2gray(image)
    # 调整图像大小
    image = resize(image, new_size, anti_aliasing=True)
    # 使用HOG特征提取
    features, hog_image = hog(image, pixels_per_cell=(8, 8),
                              cells_per_block=(2, 2), visualize=True)
    return features
# 用joblib把叫做 name 的对象 obj 保存(序列化)到位置 loc
def dump(obj, name, loc):
    start = time.time()
    print(f"把{name}保存到{loc}") # 打印保存文件的信息
    joblib.dump(obj, loc) # 保存文件
    end = time.time()
    print(f"保存完毕,文件位置:{loc}, 大小:{os.path.getsize(loc) / 1024 / 1024:.3f}M")
    print(f"运行时间:{end - start:.3f}秒")
# 用joblib读取(反序列化)位置loc的对象obj,对象名为name
def load(name, loc):
    print(f"从{loc}提取文件{name}")
    obj = joblib.load(loc)
    return obj
